#pragma once

#include "Factory.h"
#include <string>

class KnowledgeBaseElementInterface;
typedef Factory < KnowledgeBaseElementInterface >::Ptr KnowledgeBaseElementInterfacePtr;

class KnowledgeBaseElementInterface
{
public:
	virtual ~KnowledgeBaseElementInterface () {}
	virtual int SeniorKey () = 0;
	virtual int SeniorType () = 0;
	virtual std::string LexemText () = 0;
	virtual bool UpperBranch () = 0;
	virtual bool LowerBranch () = 0;
	virtual int NextLevel () = 0;
	virtual int Synonym () = 0;
	virtual int AdjacentAscending () = 0;
	virtual int AdjacentDescending () = 0;
	virtual int BeforeAdjacentAscending () = 0;
	virtual int BeforeAdjacentDescending () = 0;
	virtual int GreaterAscending () = 0;
	virtual int GreaterDescending () = 0;
	virtual int LesserAscending () = 0;
	virtual int LesserDescending () = 0;
	virtual void SetSeniorKey ( int seniorKey ) = 0;
	virtual void SetSeniorType ( int seniorType ) = 0;
	virtual void SetUpperBranch ( bool upperBranch ) = 0;
	virtual void SetLowerBranch ( bool lowerBranch ) = 0;
	virtual void SetNextLevel ( int nextLevel ) = 0;
	virtual void SetSynonym ( int synonym ) = 0;
	virtual void SetAdjacentAscending ( int adjacentAscending ) = 0;
	virtual void SetAdjacentDescending ( int adjacentDescending ) = 0;
	virtual void SetBeforeAdjacentAscending ( int beforeAdjacentAscending ) = 0;
	virtual void SetBeforeAdjacentDescending ( int beforeAdjacentDescending ) = 0;
	virtual void SetGreaterAscending ( int greaterAscending ) = 0;
	virtual void SetGreaterDescending ( int greaterDescending ) = 0;
	virtual void SetLesserAscending ( int lesserAscending ) = 0;
	virtual void SetLesserDescending ( int lesserDescending ) = 0;
};
